<?php


class UsuariosController extends BaseController
{
    public function indexAction() {
		echo $this->view->usuario = 'Cadastro do Usuário';
    }

    public function editarAction(){
    	$id = $this->_getParam('id');
    	
    	$model = new Application_Model_Usuario();
    	$usuario = $model->fetchAll("id = $id")->current();
        
    	$this->view->form = new Form_Usuarios_Usuario();
    	$dadosUsuario = $usuario->toArray();
    	unset($dadosUsuario['senha']);
		$this->view->form->populate($dadosUsuario);
		$entidades = new Application_Model_Entidades();
		$this->view->form->codinstituicaodestino->addMultiOptions($entidades->getArrayEntidades())->setValue($usuario->codinstituicaodestino);
    	
		if ($this->_getParam('Próximo')){
			$this->_usuarioOrgao($this->getRequest()->getParams());
       	}
    	if ($this->_getParam('Gravar')){
    		$arraygravar = $this->_getAllParams();
    		$arrayeditar = $_SESSION['parametros']['parametro'];
    		$unirarray = array_merge($arrayeditar,$arraygravar); 
    		$this->_gravar($unirarray);
       	}
		$this->view->id = $id;
	}
	
	public function _usuarioOrgao($parametros){
		
		$this->view->form = new Form_Usuarios_UsuarioOrgaoPerfil();
		$entidadesorgaos = new Application_Model_EntidadesOrgaos();
		$model = new Application_Model_Usuario();
		$id = $this->_getParam('id');
    	
    	if ($id <> null){
    	$usuario = $model->fetchAll("id = $id")->current();	
    	}
    	$instituicao = $this->_getParam('codinstituicaodestino');
    	$orgaosdaentidade = $entidadesorgaos->fetchAll("cod_instituicao = '$instituicao'");
		$perfil = new Application_Model_Perfil();
		if ($id <> null){
		$this->view->form->codorgaodestino->addMultiOptions($entidadesorgaos->getArrayEntidadesOrgaos($instituicao))->setValue($usuario->codorgaodestino);
		$this->view->form->perfil_id->addMultiOptions($perfil->getArrayPerfis())->setValue($usuario->perfil_id);
		}else {
			$this->view->form->codorgaodestino->addMultiOptions($entidadesorgaos->getArrayEntidadesOrgaos($instituicao));
			$this->view->form->perfil_id->addMultiOptions($perfil->getArrayPerfis());
		}
		$this->view->id = $id;
		$sessao = new Zend_Session_Namespace('parametros');
		$sessao->parametro = $parametros;
				
	}
	
	
	
	public function _gravar($parametros){
	
		if ($this->getRequest()->getPost() && $this->view->form->isValid($parametros)){
			$usuarioModel = new Application_Model_Usuario();
			//var_dump($parametros['id']);die;
			$usuario = $usuarioModel->find($this->_getParam('id'))->current();;
			$usuario->setFromArray($parametros);
			$usuario->senha = md5($parametros['senha']);
			try{
				$usuario->save();
			}catch (Exception $e) {
				echo  '<pre>'; var_dump($e); echo  '</pre>'; die();
			}
		    $this->_helper->redirector('index','usuarios');
			
		}
		
	}
	
	public function cadastrarAction(){
		    	
    	$model = new Application_Model_Usuario();
    	        
    	$this->view->form = new Form_Usuarios_Usuario();
    	$entidades = new Application_Model_Entidades();
		$perfil = new Application_Model_Perfil();
		$this->view->form->codinstituicaodestino->addMultiOptions($entidades->getArrayEntidades());
		
		
		if ($this->_getParam('Próximo')){
			$this->_cadastrarUsuarioOrgao($this->getRequest()->getParams());
       	}
		if ($this->_getParam('Gravar')){
    		$arraygravar = $this->_getAllParams();
    		$arrayeditar = $_SESSION['parametros']['parametro'];
    		$unirarray = array_merge($arrayeditar,$arraygravar); 
    		$this->_salvar($unirarray);
       	}
		
	}
	
	public function _cadastrarUsuarioOrgao($parametros){
		
		$this->view->form = new Form_Usuarios_UsuarioOrgaoPerfil();
		$entidadesorgaos = new Application_Model_EntidadesOrgaos();
		$model = new Application_Model_Usuario();
		$id = $this->_getParam('id');
    	
    	$instituicao = $this->_getParam('codinstituicaodestino');
    	$orgaosdaentidade = $entidadesorgaos->fetchAll("cod_instituicao = '$instituicao'");
		$perfil = new Application_Model_Perfil();
		
		$this->view->form->codorgaodestino->addMultiOptions($entidadesorgaos->getArrayEntidadesOrgaos($instituicao));
		$this->view->form->perfil_id->addMultiOptions($perfil->getArrayPerfis());
		
		$this->view->id = $id;
		$sessao = new Zend_Session_Namespace('parametros');
		$sessao->parametro = $parametros;
			
	}
	
	private function _salvar($array){
				
		 if ($this->getRequest()->getPost() && $this->view->form->isValid($array) ){
			
			$resultadocpf = $this->_checarCpfDuplicado($array['cpf']);
			$resultadologin = $this->_checarLoginDuplicado($array['login']);
			
	        	
			if($resultadocpf === false && $resultadologin === false) {
				$usuarioModel = new Application_Model_Usuario ();
				$usuario = $usuarioModel->createRow ($array);
				$usuario->senha = md5 ( $this->view->form->senha );
				$usuario->save ();
				$this->_helper->flashMessenger('Usuário salvo com sucesso');
				$this->_helper->redirector('index','usuarios');	
			}
			else{
				$this->_helper->flashMessenger('Já existe um Usuários com Mesmo Nome ou CPF');
				$this->_helper->redirector('cadastrar','usuarios');
			}
		}
		
		if($this->_checarCpfDuplicado($array['cpf'])){
			return true;
		}
		if($this->_checarLoginDuplicado($array['login'])){
			return true;
		}
		
		
	}
	
	public function excluirAction(){
		$id = $this->_getParam('id');
		$model = new Application_Model_Usuario();
		$model->getAdapter()->beginTransaction();
				try {
					$usuario = $model->fetchAll("id = $id")->current();
			    	$usuario->delete();
			    	$this->_helper->flashMessenger('Usuário Excluído com sucesso');
			    	$model->getAdapter()->commit();
					$this->_helper->redirector('index','usuarios');	
				} catch (Exception $e) {
    		$this->_helper->flashMessenger('Houve um erro na exclusão');
    		$model->getAdapter()->rollBack();
    	}
	}
				

		
	private function _checarLoginDuplicado($login){
		$rowset = $this->_getModel()->fetchAll("login = '$login'");
		if (count($rowset) > 0){
			return true;
		}
		return false;
	}
    
	private function _checarCpfDuplicado($cpf){
		$rowset = $this->_getModel()->fetchAll("cpf = '$cpf'");
		if (count($rowset) > 0){
			return true;
		}
		return false;
	}
    
	private function _getModel(){
		return new Application_Model_Usuario ();
	}
    
}